package bit_pratice.day7;

/**
 * @author 美女
 * @date 2022/05/06 14:28
 **/
import java.util.*;
//距离某个数n最近的fib数
public class Num1距离某个数n最近的fib数 {
    public static void main(String[] args){
        //1.一个数变为它最左边的fib数l：n-l步
        //一个数变为它右边的fib数r：r-n步
        //若他本身就是fib数，n-n=0步（n看作r）
        //此时题目变为求一个数左边的fib数和右边的fib数
        //借助循环：f2<N时，f3=f1+f2;f1=f2;f2=f3;,循环结束f1<n<=f2，f1就是n左边的fib数，f2就是右边的fib数
        //f2拿到的是最后一个fib的值（大于n的第一个），与n相等时，f2=n，而f1是n左边的第一个fib数，所以，等号取在f2处
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        //求离正整数n最近的一个fib数
        //遍历求斐波那契数列，寻找距离n最近的fib数
        int f1=0;
        int f2=1;
        int f3=0;
        while(f2<n){
            f3=f2+f1;
            f1=f2;
            f2=f3;
        }
        //到这里f2一定大于等于n,同时f1是n左侧第一个fib数
        int min=Math.min(n-f1,f2-n);
        System.out.println(min);
    }
}
